﻿using System;

namespace Borg
{
    public interface ILogFormatter
    {
        LogArgs FormatContractAdded(object source, Contract contract);
        LogArgs FormatSlotDefinitionAdded(object source, SlotDefinition slotDefinition);

        LogArgs FormatSlotDefinitionRemoved(object source, SlotDefinition slotDefinition);
        LogArgs FormatContractRemoved(object source, Contract contract);

        LogArgs FormatPluginAdded(object source, Plugin plugin);
        LogArgs FormatExtensionTypeAdded(object source, ExtensionType extensionType);
        LogArgs FormatPlugTypeAdded(object source, PlugType plugType);
        LogArgs FormatSlotTypeAdded(object source, SlotType slotType);

        LogArgs FormatSlotTypeRemoved(object source, SlotType slotType);
        LogArgs FormatPlugTypeRemoved(object source, PlugType plugType);
        LogArgs FormatExtensionTypeRemoved(object source, ExtensionType extensionType);
        LogArgs FormatPluginRemoved(object source, Plugin plugin);

        LogArgs FormatCreated(object source, Extension extension);
        LogArgs FormatActivated(object source, Extension extension);
        LogArgs FormatDeactivated(object source, Extension extension);
        LogArgs FormatDestroyed(object source, Extension extension);

        LogArgs FormatOpened(object source, Slot slot);
        LogArgs FormatClosed(object source, Slot slot);

        LogArgs FormatPlugged(object source, Slot slot, Plug plug);
        LogArgs FormatUnplugged(object source, Slot slot, Plug plug);

        LogArgs FormatTagged(object source, Slot slot, Plug plug, string tag);
        LogArgs FormatUntagged(object source, Slot slot, Plug plug, string tag);

        LogArgs FormatUnhandledException(object source, Exception unhandledException, bool showStackTrace);
    }
}
